Video compressor/decompressors, known as “codecs,” are used for the compression of video signals, in order to reduce the bandwidth required for transmission. Video codecs must compress extremely large volumes of data in very short time intervals, for example for streaming over a computer network such as the Internet, for broadcast by a satellite or cable broadcast system, or for playback by a digital video disk player.
Video signals are most often compressed according to the MPEG (Motion Picture Experts Group) compression standard. An MPEG bit stream consists of three components: system, video and audio. The system component relates information about the bit stream and its format, while the video and audio components are compressed versions of a real-time stream of audio and video data. Because high quality video is so data intensive, most of the available bandwidth is occupied by the video data.
According to MPEG standards, the video stream is generated as a series of frames at a constant bit rate, the frames being categorized as either I (intraframe), P (predicted) or B (bi-directional) frame. A group of pictures (GOP) starts with an I frame, which contains all the data necessary to describe the image represented by the frame, and within the GOP is followed by a predicted frame which contains data representing the difference between itself and the previous I or P frame. Two B frames, which contain data defining the difference between the previous frame and the following frame, are interposed between I and P frames and between P frames. A compressed MPEG stream therefore consists of an I frame and at least one P frame, each P frame being separated from the previous I frame or P frame by a pair of B frames.
MPEG supports different frame rates, the most common being 29.97, 30, 59.94, or 60 frames per second. Even at the slowest of these frame rates, on average each frame must be compressed within about 33 ms in order to generate a compressed video signal in real-time. Compression of a video signal into MPEG format in real-time thus requires a very high processing speed for large image sizes such as high definition (HD). Since current processors are incapable of achieving this level of performance, conventional codecs can only generate a compressed video stream in real-time by dropping frames from the GOP, as shown in FIG. 1. In addition to requiring complicated algorithms to minimize the loss of image information as frames are dropped, this inevitably reduces the picture quality produced by the uncompressed signal input to the video display device.
Software-based codec performance is largely dependent upon the speed of the processor, and as such advances in processing performance were initially based upon increasing the processor clock rate. More recently, attempts to increase the processing rate have been directed to using multiple host processors, whether as separate chips or multiple CPU cores in a single chip. However, as multiple processors are introduced codec performance scalability must be designed for multiple thread, non-uniform memory access (NUMA) in order to make effective use of the multiple processing cores. Distribution of the processing load to the additional processors cannot be effectively controlled, so the internal threads do not necessarily balance the processing load across all available CPUs, and since codec architectures are complex and not readily restructured, redesigning the codec in order to efficiently distribute the processing load amongst different processing cores is not practical. As such, providing multiprocessing capability to a conventional codec is not an efficient solution to the need for increased processing capacity, because the additional processing resources are used only minimally and therefore relatively little performance advantage over a conventional CPU implementation is realized. Frames must still be dropped from the compressed output signal, with attendant loss of image quality.
It would accordingly be advantageous to provide a method and apparatus for the compression of video in real-time using multiple processors, which balances the processing load amongst available resources without having to redesign the codec architecture to accommodate multiprocessing.
The present invention provides a method of compressing a video signal comprising a stream of data representing a series of image frames in chronological order, comprising the steps of: a. parsing the video signal into blocks, each block comprising a preselected number of frames, b. time stamping each block, c. distributing successive blocks to different processing elements for compression, d. compressing the blocks, e. storing each compressed block to allow sufficient time for the compression and storage of at least one immediately succeeding block, and f. assembling the compressed blocks in chronological order in a compressed video stream.
The present invention further provides a computer program product for use with a computer, the computer program product comprising a computer usable medium having computer readable program code means embodied in said medium for compressing a video signal comprising a stream of data representing a series of image frames in chronological order, said computer program product having computer readable program code means for parsing the video signal into blocks, each block comprising a preselected number of frames, computer readable program code means for time stamping each block, computer readable program code means for distributing successive blocks to different processing elements for compression, computer readable program code means for compressing the blocks, computer readable program code means for storing each compressed block to allow sufficient time for the compression and storage of at least one immediately succeeding block, and computer readable program code means for assembling the compressed blocks in chronological order in a compressed video stream.
The present invention further provides an apparatus for compressing a video signal comprising a stream of data representing a series of image frames in chronological order, comprising a plurality of processing elements for compressing blocks of the video signal, each block comprising a preselected number of frames, a demultiplexer for parsing the video signal into the blocks, time stamping each block and distributing successive blocks to different processing elements of the plurality of processing elements for compression, a buffer associated with an output of each processing element, for storing each compressed block, and a multiplexer for assembling the compressed blocks in chronological order in a compressed video stream, whereby each block is stored in the buffer for a sufficient interval to allow time for the compression and storage of at least one immediately succeeding block.